package com.utf999.qiangmanger.service.iface;

import java.util.List;

import com.utf999.qiangmanger.entity.orm.AdminUserEntity;
import com.utf999.qiangmanger.exception.AuthenticationException;
import com.utf999.qiangmanger.exception.BizException;
import com.utf999.qiangmanger.service.IQiangService;

public interface IAdminUserService extends IQiangService {
	/**
	 * 控制台用户登录的操作。<br>
	 * 所谓控制台用户就是存储在AdminUser数据表中的，可以操作后台的用户。超级管理员、店面管理员、收银员
	 * @param userName 登录的用户名
	 * @param password 登录时输入的密码（未经过加密）
	 * @throws AuthenticationException
	 * @return 登录成功后的token信息则被返回
	 */
	public String consoleUserLogon(String userName , String password) throws AuthenticationException;
	
	/**
	 * 该处理方法用于新增一个后台管理员/后台使用者（新增超级管理员） 
	 * @param username 新增的用户（注意如果用户名重复，会报错） 
	 * @param password 新增用户的密码信息 
	 * @throws BizException  
	 * @return 这个被创建的用户信息，将被返回 
	 */
	public AdminUserEntity appendSuperAdminuser(String username , String password) throws BizException;
	
	/**
	 * 该处理方法用于新增一个后台管理员/后台使用者（新增店面管理员）
	 * @param username 新增的用户（注意如果用户名重复，会报错）
	 * @param password 新增用户的密码信息
	 * @param adminlevel 店面管理员的级别，包括两个：3、店面管理员；4、店面收银员
	 * @param storeid 这个管理员所说的店面信息（这样就可以查找出公司信息了）<br>
	 * @throws BizException
	 * @return 这个被创建的用户信息，将被返回
	 */
	public AdminUserEntity appendStoreAdminuser(String username , String password , Integer adminlevel , String storeid) throws BizException;
	
	/**
	 * 该处理方法用于新增一个后台管理员/后台使用者（新增公司管理员）
	 * @param username 新增的用户（注意如果用户名重复，会报错）
	 * @param password 新增用户的密码信息
	 * @param companyid 这个管理员所属的公司信息
	 * @throws BizException
	 * @return 这个被创建的用户信息，将被返回
	 */
	public AdminUserEntity appendCompanyAdminuser(String username , String password , String companyid) throws BizException;
	
	/**
	 * 修改指定管理员的密码
	 * @param adminid 指定的管理员
	 * @param password 密码信息
	 * @throws BizException
	 */
	public void modifyAdminuserPassword(String adminid , String password) throws BizException;
	
	/**
	 * 修改指定用户的状态 
	 * @param adminid
	 * @throws BizException
	 */
	public void modifyUserStatus(String adminid) throws BizException;
	
	/**
	 * 按照用户名查询 后台管理系统的使用者信息
	 * @param userName 后台系统使用的用户名
	 * @return 查询到的用户信息将被返回；否则返回null
	 * @throws BizException
	 */
	public AdminUserEntity queryAdminUser(String userName) throws BizException;
	
	/**
	 * 查询指定商户下的后台管理员信息
	 * @param storeid 商户的编号信息
	 * @param status 可能传入的参数，如果传入，则表示只查询某种状态的管理员用户 
	 * @return 符合查询条件的信息在这里返回
	 * @throws BizException
	 */
	public List<AdminUserEntity> queryAdminByStore(String storeid , Integer status) throws BizException;
	
	/**
	 * 按照后台用户登录时的token，查询对应的用户信息
	 * @param token
	 * @return
	 * @throws BizException
	 */
	public AdminUserEntity queryAdmingByToken(String token) throws BizException;
	
	/**
	 * 查询系统中超级管理员的信息
	 * @param status 可能传入的参数，如果传入，则表示只查询某种状态的管理员用户 
	 * @return
	 * @throws BizException
	 */
	public List<AdminUserEntity> querySuperAdmin(Integer status) throws BizException;
	
	/**
	 * 查询系统中指定公司的公司管理员的基本信息。注意一个公司肯定有一个管理员（且只有一个）<br>
	 * 公司管理员无法被禁用
	 * @param companyid 指定的公司编号
	 * @return
	 * @throws BizException
	 */
	public List<AdminUserEntity> queryCompanyAdmin(String companyid) throws BizException;
}
